#include "flash_task.h"



void flash_task(void const * argument)
{
//	while(hal_init_if==False){
//		osDelay(1);
//	}
	w25q128_config_init();
	uint8_t fail_cnt=0;
	vision_tool_basic_config_init();
	while(1)
	{
		if(vision_basic_config.device_master_if==True){
			//LED_SET(0,GPIO_PIN_SET);
			HAL_GPIO_TogglePin(LED0_GPIO_Port,LED0_Pin);
			osDelay(500);
		}
		else if(vision_basic_config.device_master_if==False){
			LED_SET(0,GPIO_PIN_RESET);
		}


		if(w25q128_data.flash_init_flag==True){
			switch(vision_basic_config.flash_work_step){
				case FLASH_STEP_SELF_TEST:
					flash_self_test();
					break;
				case FLASH_STEP_ENSURE:
					flash_ensure_file_exist();
					break;
				case FLASH_STEP_WORK:
					break;
				default:
					break;
			}
		}

		if(w25q128_data.flash_init_flag==0){
			w25q128_init();
			fail_cnt++;
			if(fail_cnt>10){
				w25q128_data.flash_init_flag=1;
			}
		}
		else if(w25q128_data.flash_init_flag==1){
			if(w25q128_data.flash_erase_all_flag){
				w25q128_erase_chip();
				w25q128_data.flash_erase_all_flag=0;
			}
			if(w25q128_data.flash_erase_addr_flag){
				w25q128_erase_sector(w25q128_data.flash_erase_addr_set);
				w25q128_data.flash_erase_addr_flag=0;
			}
			if(w25q128_data.flash_write_flag){
				w25q128_write_page(w25q128_data.flash_write_buf,w25q128_data.flash_write_address,w25q128_data.flash_write_len);
				w25q128_data.flash_write_flag=0;
			}
			if(w25q128_data.flash_read_flag){
				w25q128_read(w25q128_data.flash_read_buf,w25q128_data.flash_read_address,w25q128_data.flash_read_len);
				w25q128_data.flash_read_flag=0;
			}
		}
		osDelay(1);
	}
}



void flash_self_test()
{
	flash_init(0xFFFFFF);
	vision_basic_config.flash_work_step=FLASH_STEP_ENSURE;
}

void flash_ensure_file_exist()
{
	uint8_t file[12]={"rob_cfg"};
	file[7]=0x00;
	file[8]='.';
	file[9]='b';
	file[10]='c';
	file[11]='f';
	if(get_file_id(file,get_nums())==-1){
		creat_file("rob_cfg",7,BOOL_CONFIG);
	}
	uint8_t data[10];
	File_operate_t oper;
	open_file(&oper,file,7,BOOL_CONFIG,Append);
	if(oper.now_size!=7){
		data[0]=0;//target_robot_data.target_color;
		data[1]=0;//target_robot_data.robot_3_amror_size;
		data[2]=0;//target_robot_data.robot_4_amror_size;
		data[3]=0;//target_robot_data.robot_5_amror_size;
		data[4]=0;//oled_rotate_if;
		data[5]=1;//id
		data[6]=1;//master
		file_write_data(&oper,data,0,7);
	}
	
	file_read(&oper,data,0,7);
	target_robot_data.target_color=data[0];
	target_robot_data.robot_3_amror_size=data[1];
	target_robot_data.robot_4_amror_size=data[2];
	target_robot_data.robot_5_amror_size=data[3];
	oled_rotate_if=data[4];
	vision_basic_config.device_id=data[5];
	vision_basic_config.device_master_if=data[6];
	file_close(&oper);
	vision_basic_config.flash_work_step=FLASH_STEP_WORK;
}

